| Time | Topic |
|---|---|
| Day 1 | |
| 15:30 - 16:00 | Network Programmability & Automation |
| 16:00 - 16:30 | Ansible 101 |
| 16:30 - 17:00 | Exercise 1 |
| Day 2 | |
| 15:30 - 16:00 | Ansible 102 |
| 16:00 - 17:00 | Exercise 2 |
<rpc-reply xmlns:junos="http://xml.juniper.net/junos/13.3R5/junos">
<software-information>
<host-name>M320-TEST-re0</host-name>
<product-model>m320</product-model>
<product-name>m320</product-name>
<junos-version>13.3R5.9</junos-version>
</software-information>
<cli>
<banner>{master}</banner>
</cli>
</rpc-reply>---
parameter_defaults:
ControlPlaneDefaultRoute: "192.0.2.1"
ControlPlaneSubnetCidr: 24
DnsServers:
- "192.168.23.1"
EC2MetadataIp: "192.0.2.1"
ExternalAllocationPools:
- end: "10.0.0.250"
start: "10.0.0.4"
ExternalNetCidr: "10.0.0.1/24"
NeutronExternalNetworkBridge: ""{
"parameter_defaults": {
"ControlPlaneDefaultRoute": "192.0.2.1",
"ControlPlaneSubnetCidr": "24",
"DnsServers": [
"192.168.23.1"
],
"EC2MetadataIp": "192.0.2.1",
"ExternalAllocationPools": [
{
"end": "10.0.0.250",
"start": "10.0.0.4"
}
],
"ExternalNetCidr": "10.0.0.1/24",
"NeutronExternalNetworkBridge": ""
}
} module configuration {
namespace "http://xml.juniper.net/xnm/1.1/xnm";
prefix junos;
organization
"Juniper Networks, Inc.";
revision "2015-09-11" {
description "Initial revision";
}
typedef ipv4addr {
type string;
}
grouping juniper-config {
container backup-router {
description "IPv4 router to use while booting";
leaf address {
description "Address of router to use while booting";
type ipv4addr;
mandatory true;
}
presence "enable backup-router";
leaf-list destination {
description "Destination network reachable through the router";
type ipv4prefix;
}
}
...
https://raw.githubusercontent.com/Juniper/yang/master/14.2/configuration.yang
{% for key, value in vlanDict.iteritems() -%}
vlan {{ key }}
name {{ value }}
{% endfor %}
>>> vlanDict = {123: 'TEST-VLAN-123', 234: 'TEST-VLAN-234', 345: 'TEST-VLAN-345'}
>>> from jinja2 import Environment
>>> env = Environment(loader=FileSystemLoader('./Templates/'))
>>> template = env.get_template('ourtemplate')
>>> print template.render(vlanDict)
vlan 123
name TEST-VLAN-123
vlan 234
name TEST-VLAN-234
vlan 345
name TEST-VLAN-345* Playbook
* Inventory
Contains the devices (ip or fqdn) that will be automated, and the associated variables
[barcelona-dc]
switch01
switch02
[madrid-dc]
172.31.200.1
switch03
[barcelona-cpe]
vmx1
[madrid-cpe]
172.22.3.1
[barcelona:children]
barcelona-dc
barcelona-cpe
[all:vars]
ntp_server=10.20.30.4
[barcelona:vars]
ntp_server=192.168.0.1
[madrid:vars]
ntp_server=10.0.0.1
or
[barcelona-dc]
switch01 ntp_server=192.168.0.3
switch02
It's the file that contain your automation instructions
---
- name: PLAY 1 - Configure Interface Speed
hosts: barcelona-dc
connection: local
gather_facts: no
tasks:
- name: TASK1 - Get interface information
ios_command:
commands:
- show run | include interfaces
provider:
username: myusername
password: mypassword
host: "{{ inventory_hostname }}"Experiment with basic Ansible automation
All you need is here: https://github.com/chadell/ansible-cumulus-vyos
| Time | Topic |
|---|---|
| Day 1 | |
| 15:30 - 16:00 | Network Programmability & Automation |
| 16:00 - 16:30 | Ansible 101 |
| 16:30 - 17:00 | Exercise 1 |
| Day 2 | |
| 15:30 - 16:00 | Ansible 102 |
| 16:00 - 17:00 | Exercise 2 |
TBD
TBD
TBD
Extend Ansible feautures to provision a network
All you need is here: https://github.com/chadell/ansible-cumulus-vyos